// import {userProfile} from "../../entity/UserProfile";
// import {GAME_CONFIGS} from "./GameConfigs";
//
// /**
//  *  如果不需要matchvs 功能,请直接注释全文.
//  */
// // @ts-ignore
// import {MatchvsEngine, MatchvsResponse} from "matchvs.all";
//
// class MatchAdapter {
//     // public static readonly obj: MatchAdapter = new MatchAdapter();
//     public readonly engine: MatchvsEngine = new MatchvsEngine();
//     public readonly response: MatchvsResponse = new MatchvsResponse();
//     private _inited: boolean = false;
//     private _isLogin: boolean = false;
//
//     public get isLogin(): boolean {
//         return this._isLogin;
//     }
//
//     public openLog(open: boolean) {
//         if (open) {
//             MatchvsLog.openLog();
//         } else {
//             MatchvsLog.closeLog();
//         }
//     }
//
//     constructor() {
//         this.init(GAME_CONFIGS.gameId);
//     }
//
//     // 初始化matchvs 引擎.
//     private init(gameId: number): Promise<any> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.initResponse = (status) => {
//                 if (status == 200) {
//                     this._inited = true;
//                     resolve()
//                 } else {
//                     reject()
//                 }
//             };
//             this.engine.init(this.response, "MatchVS", GAME_CONFIGS.DEBUG ? "alpha" : "release", gameId);
//         })
//     }
//
//     // 初始化用户ID.
//     public registerUser(): Promise<MsRegistRsp> {
//         return new Promise<MsRegistRsp>((resolve, reject) => {
//             if (!this._inited) {
//                 console.error("MatchVs 未初始化成功.");
//                 reject();
//             } else {
//                 this.response.registerUserResponse = (resp) => {
//                     console.log("用户注册信息:", resp);
//                     userProfile.userId = resp.userID + "";
//                     userProfile.token = resp.token;
//                     userProfile.name = resp.name;
//                     userProfile.avatar = resp.avatar;
//                     resolve(resp)
//                 };
//                 this.engine.registerUser();
//             }
//         })
//     }
//
//     // 用户登录/连接MatchVs服务.
//     public login(): Promise<MsLoginRsp> {
//         return new Promise<MsLoginRsp>((resolve, reject) => {
//             if (userProfile.userId && userProfile.token) {
//                 this.response.loginResponse = (resp: MsLoginRsp) => {
//                     console.log("login Resp:", resp);
//                     if (resp.status == 200) {
//                         this._isLogin = true;
//                         resolve(resp);
//                     } else {
//                         this._isLogin = false;
//                         reject(resp);
//                     }
//                 };
//                 this.engine.login(
//                     parseInt(userProfile.userId), userProfile.token, GAME_CONFIGS.gameId,
//                     GAME_CONFIGS.gameVersion, GAME_CONFIGS.appkey, GAME_CONFIGS.secret, GAME_CONFIGS.deviceId, 0);
//             } else {
//                 console.warn("用户未注册,无法登录.");
//                 reject("用户未登录");
//             }
//         })
//     }
//
//     // 退出登录.
//     public logout(proto: string): Promise<any> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.logoutResponse = (status) => {
//                 console.log("logout status:", status);
//                 if (status == 200) {
//                     resolve();
//                 } else {
//                     reject(status)
//                 }
//             };
//             this.engine.logout(proto);
//         })
//     }
//
//     // 随机匹配.
//     public joinRandomRoom(maxPlayer: number, profile: any): Promise<{ users: MsRoomUserInfo[], room: MsRoomInfo }> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.joinRoomResponse = (status: number, roomUserInfoList: MsRoomUserInfo[], roomInfo: MsRoomInfo) => {
//                 console.log("加入房间结果:", status, roomUserInfoList, roomInfo);
//                 if (status == 200) {
//                     console.log("房间匹配成功.");
//                     resolve({users: roomUserInfoList, room: roomInfo})
//                 } else {
//                     console.warn("房间匹配失败.", status);
//                     reject();
//                 }
//             };
//             let userProfile = profile ? JSON.stringify(profile) : "{}";
//             this.engine.joinRandomRoom(maxPlayer || 2, userProfile);
//         })
//     }
//
//     // 随机匹配2.
//     public joinRoomWithProperties(matchInfo: MsMatchInfo, profile: any): Promise<any> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.joinRoomResponse = (status: number, roomUserInfoList: MsRoomUserInfo[], roomInfo: MsRoomInfo) => {
//                 console.log("加入房间结果:", status, roomUserInfoList, roomInfo);
//                 if (status == 200) {
//                     console.log("房间匹配成功.");
//                     resolve({users: roomUserInfoList, room: roomInfo})
//                 } else {
//                     console.warn("房间匹配失败.", status);
//                     reject();
//                 }
//             };
//             let userProfile = profile ? JSON.stringify(profile) : "{}";
//             this.engine.joinRoomWithProperties(matchInfo, userProfile);
//         })
//     }
//
//     // 加入房间.
//     public joinRoom(roomId: number, profile: any): Promise<{ users: MsRoomUserInfo[], room: MsRoomInfo }> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.joinRoomResponse = (status: number, roomUserInfoList: MsRoomUserInfo[], roomInfo: MsRoomInfo) => {
//                 console.log("加入房间结果:", status, roomUserInfoList, roomInfo);
//                 if (status == 200) {
//                     console.log("房间匹配成功.");
//                     resolve({users: roomUserInfoList, room: roomInfo})
//                 } else {
//                     console.warn("房间匹配失败.", status);
//                     reject();
//                 }
//             };
//             let userProfile = profile ? JSON.stringify(profile) : "{}";
//             this.engine.joinRoom(roomId + "", userProfile);
//         })
//     }
//
//     // 创建房间.
//     public createRoom(roomInfo: MsCreateRoomInfo, profile: any): Promise<MsCreateRoomRsp> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.createRoomResponse = (resp: MsCreateRoomRsp) => {
//                 if (resp.status == 200) {
//                     resolve(resp)
//                 } else {
//                     reject();
//                 }
//             };
//             let userProfile = profile ? JSON.stringify(profile) : "{}";
//             this.engine.createRoom(roomInfo, userProfile);
//         })
//     }
//
//     // 离开房间.
//     public leaveRoom(proto?: string): Promise<any> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.leaveRoomResponse = (resp) => {
//                 console.log("leaveRoom response:", resp);
//                 if (resp.status == 200) {
//                     resolve(resp)
//                 } else {
//                     reject(resp.status);
//                 }
//             };
//             this.engine.leaveRoom(proto || "");
//         })
//     }
//
//     // 房间关闭匹配.
//     public joinOver(msg: any): Promise<any> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.joinOverResponse = (resp: MsJoinOverRsp) => {
//                 if (resp.status == 200) {
//                     resolve(resp.cpProto);
//                 } else {
//                     reject(status);
//                 }
//             };
//             this.engine.joinOver(JSON.stringify(msg));
//         })
//     }
//
//     // 房间关闭监听.
//     public onRoomJoinOver(callback: (resp: MsJoinOverNotifyInfo) => void) {
//         this.response.joinOverNotify = callback;
//     }
//
//     // 房间重开.
//     public joinOpen(msg: any): Promise<string> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.joinOpenResponse = (resp: MsReopenRoomResponse) => {
//                 if (resp.status == 200) {
//                     resolve(resp.cpProto);
//                 } else {
//                     reject(status);
//                 }
//             };
//             this.engine.joinOpen(JSON.stringify(msg));
//         })
//     }
//
//     // 房间重开通知.
//     public onRoomOpened(callback: (notify: MsReopenRoomNotify) => void) {
//         this.response.joinOpenNotify = callback;
//     }
//
//     // 通知房间加入状态.
//     public onPlayerJoined(callback: (user: MsRoomUserInfo) => void) {
//         this.response.joinRoomNotify = callback
//     }
//
//     // 通知玩家离开房间.
//     public onPlayerLeave(callback: (user: MsLeaveRoomNotify) => void) {
//         this.response.leaveRoomNotify = callback
//     }
//
//     // 获取大厅房间列表
//     public getRoomList(filter: MsRoomFilter): Promise<MsRoomInfoEx[]> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.getRoomListResponse = (status: number, roomList: MsRoomInfoEx[]) => {
//                 if (status == 200) {
//                     resolve(roomList)
//                 } else {
//                     reject(status)
//                 }
//             };
//             this.engine.getRoomList(filter);
//         })
//     }
//
//     // 获取大厅房间列表2.
//     public getRoomListEx(filter: MsRoomFilterEx): Promise<MsRoomAttribute[]> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.getRoomListExResponse = (resp) => {
//                 if (resp.status == 200) {
//                     resolve(resp.roomAttrs)
//                 } else {
//                     reject(resp.status);
//                 }
//             };
//             this.engine.getRoomList(filter);
//         })
//     }
//
//     // 获取创建的房间详情.
//     public getRoomDetail(roomId: number): Promise<MsGetRoomDetailRsp> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.getRoomDetailResponse = (resp) => {
//                 if (resp.status == 200) {
//                     resolve(resp)
//                 } else {
//                     reject(resp.status)
//                 }
//             };
//             this.engine.getRoomDetail(roomId + "");
//         })
//     }
//
//     // 修改房间属性.
//     public setRoomProperty(roomId: number, proper: string): Promise<MsSetRoomPropertyRspInfo> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.setRoomPropertyResponse = (resp) => {
//                 if (resp.status) {
//                     resolve(resp);
//                 } else {
//                     reject(resp.status);
//                 }
//             };
//             this.engine.setRoomProperty(roomId + "", proper);
//         })
//     }
//
//     // 修改房间属性通知.
//     public onRoomPropertyChange(callback: (roomInfo: MsRoomPropertyNotifyInfo) => void) {
//         this.response.setRoomPropertyNotify = callback
//     }
//
//     // 发送消息.
//     public sendData(msg: any): Promise<any> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.sendEventResponse = (resp: MsSendEventRsp) => {
//                 if (resp.status == 200) {
//                     resolve(resp.sequence);
//                 } else {
//                     reject(resp.status);
//                 }
//             };
//             this.engine.sendEvent(JSON.stringify(msg));
//         })
//     }
//
//     // 发送消息2.
//     public sendDataEx(msg: any, type: 0 | 1 | 2 = 0, targetType: 0 | 1 = 0, userIds: number[]): Promise<any> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.sendEventResponse = (resp: MsSendEventRsp) => {
//                 if (resp.status == 200) {
//                     resolve(resp.sequence);
//                 } else {
//                     reject(resp.status);
//                 }
//             };
//             this.engine.sendEventEx(type, JSON.stringify(msg), targetType, userIds);
//         })
//     }
//
//     // 消息监听
//     public onReceiveData(callback: (data: MsSendEventNotify) => void) {
//         this.response.sendEventNotify = callback;
//     }
//
//     // 网络状态监听.
//     public onNetChanged(callback: (netstate: MsNetworkStateNotify) => void) {
//         this.response.networkStateNotify = callback;
//     }
//
//     // 网络延时监听.
//     public onNetDelay(callback: (delay: number) => void) {
//         this.response.networkDelay = callback;
//     }
//
//     // gameServer 广播监听
//     public onGameServerNotify(callback: (notify: MsGameServerNotifyInfo) => void) {
//         this.response.gameServerNotify = callback;
//     }
//
//     // 踢人.
//     public kickPlayer(userId: number, msg: any): Promise<MsKickPlayerRsp> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.kickPlayerResponse = (resp) => {
//                 if (resp.status == 200) {
//                     resolve(resp);
//                 } else {
//                     reject(resp.status);
//                 }
//             };
//             this.engine.kickPlayer(userId, JSON.stringify(msg));
//         })
//     }
//
//     // 踢人监听.
//     public onPlayerKicked(callback: (notify: MsKickPlayerNotify) => void) {
//         this.response.kickPlayerNotify = callback;
//     }
//
//     // 订阅群组消息.
//     public subscribeEventGroup(inGroups: string[], exclude?: string[]): Promise<string[]> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.subscribeEventGroupResponse = (status, resp) => {
//                 if (status == 200) {
//                     resolve(resp);
//                 } else {
//                     reject(status);
//                 }
//             };
//             this.engine.subscribeEventGroup(inGroups, exclude || []);
//         })
//     }
//
//     // 向组队发送消息. 返回接收的人数.
//     public sendEventGroup(msg: any, groups: string[]): Promise<number> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.sendEventGroupResponse = (status, resp) => {
//                 if (status == 200) {
//                     resolve(resp);
//                 } else {
//                     reject(status);
//                 }
//             };
//             this.engine.sendEventGroup(groups, JSON.stringify(msg));
//         })
//     }
//
//     // 收到群组消息监听.
//     public onGroupMsg(callback: (srcUid: number, group: string[], msg: string) => void) {
//         this.response.sendEventGroupNotify = callback;
//     }
//
//     // 断线重连.
//     public async reconnect(): Promise<{ users: MsRoomUserInfo[], room: MsRoomInfo }> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.reconnectResponse = (status, roomUserInfoList, roomInfo) => {
//                 if (status == 200) {
//                     resolve({users: roomUserInfoList, room: roomInfo});
//                 } else {
//                     reject(status);
//                 }
//             };
//             this.engine.reconnect();
//         })
//     }
//
//     // rate >=0,<=20. =0关闭帧同步.
//     public setFrameSync(rate: number): Promise<any> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.setFrameSyncResponse = (resp: MsSetChannelFrameSyncRsp) => {
//                 if (resp.status == 200) {
//                     resolve(0);
//                 } else {
//                     reject(status);
//                 }
//             };
//             this.engine.setFrameSync(rate)
//         })
//     }
//
//     // 发送帧同步消息.
//     public sendFrameEvent(msg: any): Promise<any> {
//         return new Promise<any>((resolve, reject) => {
//             this.response.sendFrameEventResponse = (resp: MsSendFrameEventRsp) => {
//                 if (resp.mStatus == 200) {
//                     resolve(0);
//                 } else {
//                     reject(status);
//                 }
//             };
//             this.engine.sendFrameEvent(JSON.stringify(msg))
//         })
//     }
//
//     // 帧同步消息监听.
//     public onFrameUpdate(callback: (data: MsFrameData) => void) {
//         this.response.frameUpdate = callback;
//     }
// }
//
// export const mvs = new MatchAdapter();